home *** CD-ROM | disk | FTP | other *** search
/ Scene 96 / Scene 96 International Edition (Zyklop Software) (Disc 2) (1997).iso / misc / coding / onenssrc / part1.pas < prev    next >
Pascal/Delphi Source File  |  1996-01-18  |  5KB  |  279 lines

  1. unit Part1;
  2.  
  3. interface
  4.  
  5. uses
  6.     zipvga, {liktwk,} crt, oneres, fastsine;
  7.  
  8.     procedure Run;
  9.  
  10. implementation
  11.  
  12. const
  13.     firstframe = 0;
  14.     lastframe = firstframe + 1024;
  15.  
  16. var
  17.     i, j, k, d : word;
  18.     swerve : integer;
  19.     aswerve : word;
  20.     f : longint;
  21.     scr, tab, pic : ^screen2;
  22.     scrs, tabs, pics : word;
  23.  
  24.     procedure MakePic;
  25.  
  26.     var
  27.         i, j : word;
  28.  
  29.     begin
  30.         for i := 0 to 65535 do
  31.             vscr2[i] := random(128) + random(128) + 1;
  32.         pic^ := vscr2;
  33.         {for i := 0 to 65535 do
  34.             vscr2[i] := (pic^[i+1] + pic^[i-1] + pic^[i+256] + pic^[i-256]) div 8
  35.                     + (pic^[i+321] + pic^[i - 321] + pic^[i+319] - pic^[i-319]) div 8;}
  36.         for j := 0 to 2 do
  37.          begin
  38.             for i := 0 to 65535 do
  39.                 vscr2[i] := (pic^[i+1] + pic^[i] + pic^[i+320] + pic^[i+321]) div 4 + random(4) - random(4);
  40.             pic^ := vscr2;
  41.          end;
  42.     end;
  43.  
  44.     (*procedure MakeTabs;
  45.  
  46.     var
  47.         dx, dy : integer;
  48.         z, d : longint;
  49.  
  50.     begin
  51.         brightness (63, 0);
  52.         {if not loadpic2('tunnel.tab', tab^) then}
  53.          begin
  54.             for dx := -160 to 159 do
  55.              begin
  56.                 for dy := -50 to 49 do
  57.                  begin
  58.                     if dx = 0 then
  59.                      begin
  60.                         if dy > 0 then
  61.                             tab^[(dy + 50)*320 + dx + 160] := 64
  62.                         else
  63.                             tab^[(dy + 50)*320 + dx + 160] := 192;
  64.                      end
  65.                     else
  66.                         tab^[(dy + 50)*320 + dx + 160] := round(arctan(dy/dx)*256/2/pi);
  67.                     if dx < 0 then
  68.                         tab^[(dy + 50)*320 + dx + 160] := (tab^[(dy + 50)*320 + dx + 160] + 128) mod 256;
  69.                  end;
  70.                 vscr2 := tab^;
  71.              end;
  72.  
  73.             for dx := -160 to 159 do
  74.              begin
  75.                 for dy := -50 to 49 do
  76.                  begin
  77.                     z := dx*dx + dy*dy;
  78.                     d := round(256000/(sqrt(z) + 1)) div 100;
  79.                     tab^[(dy + 50)*320 + 32768 + dx + 160] := mini(d, 255);
  80.                  end;
  81.                 vscr2 := tab^;
  82.              end;
  83.  
  84.             savepic2 ('tunnel.tab', tab^);
  85.          end;
  86.  
  87.         vscr2 := tab^;
  88.     end;*)
  89.  
  90. procedure Run;
  91.  
  92. begin
  93.     {new (scr);}
  94.     scr := @vscr2;
  95.     new (tab);
  96.     new (pic);
  97.     scrs := seg(scr^);
  98.     tabs := seg(tab^);
  99.     pics := seg(pic^);
  100.  
  101.     initb;
  102.     {init60hz256256256c;}
  103.  
  104.     initvga;
  105.  
  106.     brightness (0, 0);
  107.  
  108.     MakePic;
  109.     {readkey;}
  110.  
  111.     {MakeTabs;
  112.     readkey;}
  113.     fetch ('tunnel.tab');
  114.     blockread (lf, tab^, 32768);
  115.     blockread (lf, tab^[32768], 32768);
  116.  
  117.     filldword (vscr, 16384, 0);
  118.  
  119.     j := 0;
  120.     k := 0;
  121.     f := 0;
  122.     repeat
  123.         getpos;
  124.         f := track*256 + row*4;
  125.         if f < firstframe + 256 then
  126.             brightness ((f - firstframe) div 4, 0)
  127.         else if f > lastframe - 64 then
  128.             brightness ((lastframe - f), (f - lastframe + 64));
  129.         {for i := 0 to 32767 do
  130.          begin
  131.             d := tab^[i+32768];
  132.             vscr2[i+63*256] := pic^[d*256 + tab^[i] + j*3*256 + j]*(255 - d) div 256;
  133.          end;}
  134.  
  135.         {retrace;}
  136.         {setrgb (0, 31, 0, 0);}
  137.  
  138.         {swerve := ssin(f) div 16 + (scos(f) div 16)*320;}
  139.         if f < firstframe + 160 then
  140.             swerve := 160 - f + firstframe
  141.         else if f > lastframe - 160 then
  142.             swerve := - 160 + lastframe - f
  143.         else
  144.             swerve := 0;
  145.         aswerve := abs(swerve);
  146.  
  147.         {repeat until sync;
  148.         sync := false;}
  149.         if trapretrace then
  150.             retrace;
  151.         asm
  152.             mov ax, k
  153.             mov ah, al
  154.             xor al, al
  155.             mov si, ax
  156.             add si, j
  157.  
  158.             mov cx, [aswerve]
  159.  
  160.             xor di, di
  161.             cmp [swerve], 0
  162.             jg @AtEnd
  163.             xor al, al
  164.             mov dx, [scrs]
  165.             mov es, dx
  166.             add di, 50*320
  167.             rep stosb
  168.             sub di, 50*320
  169.          @AtEnd:
  170.  
  171.             mov cx, 32000
  172.             sub cx, [aswerve]
  173.          @Loop:
  174.             mov dx, [tabs]
  175.             mov es, dx
  176.  
  177.             mov bh, es:[di]
  178.             add di, [swerve]
  179.             mov bl, es:[di+32768]
  180.             sub di, [swerve]
  181.  
  182.             mov dx, [pics]
  183.             mov es, dx
  184.  
  185.             mov al, es:[bx+si]
  186.             mov ah, 255
  187.             sub ah, bl
  188.             mul ah
  189.  
  190.             mov dx, 0A000h {[scrs]}
  191.             mov es, dx
  192.  
  193.             mov es:[di+50*320], ah
  194.  
  195.             inc di
  196.             dec cx
  197.             jnz @Loop
  198.  
  199.             cmp [swerve], 0
  200.             jl @AtBeginning
  201.             add di, 50*320
  202.             mov cx, [aswerve]
  203.             xor al, al
  204.             rep stosb
  205.          @AtBeginning:
  206.         end;
  207.         (*asm
  208.             mov dx, [tabs]
  209.             mov es, dx
  210.  
  211.             mov dx, [pics]
  212.             {mov fs, dx} db $8E,$E2
  213.  
  214.             mov dx, [scrs]
  215.             {mov gs, dx} db $8E,$EA
  216.  
  217.             mov ax, k
  218.             mov ah, al
  219.             xor al, al
  220.             mov si, ax
  221.             add si, j
  222.  
  223.             mov cx, [aswerve]
  224.  
  225.             xor di, di
  226.             cmp [swerve], 0
  227.             jg @AtEnd
  228.             xor al, al
  229.             mov dx, [scrs]
  230.             mov es, dx
  231.             add di, 50*320
  232.             rep stosb
  233.             sub di, 50*320
  234.          @AtEnd:
  235.  
  236.             mov cx, 32000
  237.             sub cx, [aswerve]
  238.          @Loop:
  239.             mov dx, [tabs]
  240.             mov es, dx
  241.  
  242.             mov bh, es:[di]
  243.             add di, [swerve]
  244.             mov bl, es:[di+32768]
  245.             sub di, [swerve]
  246.  
  247.             {mov al, fs:[bx+si]} db $64,$8A,$00
  248.             mov ah, 255
  249.             sub ah, bl
  250.             mul ah
  251.  
  252.             {mov gs:[di+50*320], ah} db $65,$88,$A5,$80,$3E
  253.  
  254.             inc di
  255.             dec cx
  256.             jnz @Loop
  257.  
  258.             cmp [swerve], 0
  259.             jl @AtBeginning
  260.             add di, 50*320
  261.             mov cx, [aswerve]
  262.             xor al, al
  263.             rep stosb
  264.          @AtBeginning:
  265.         end;*)
  266.         {setrgb (0, 0, 0, 0);}
  267.  
  268.         {for i := 0 to 15 do
  269.             inc (pic^[j + k*256], random(64));}
  270.  
  271.         inc (j, 2);
  272.         inc (k, 1);
  273.     until keypressed or (f >= lastframe);
  274.  
  275.     dispose (tab);
  276.     dispose (pic);
  277. end;
  278.  
  279. end.